package com.monolithiot.sso.service;

import com.monolithiot.sso.common.entity.Authorization;
import com.monolithiot.sso.common.entity.User;

/**
 * 2018/12/11 Create by 郭文梁
 * AuthorizationService
 * 授权业务功能定义
 *
 * @author 郭文梁
 * @date 2018/12/11
 */
public interface AuthorizationService extends BaseService<Authorization> {
    /**
     * 新增或生成一个授权
     *
     * @param user     用户信息
     * @param expireIn 授权时间
     * @return 授权信息
     */
    Authorization getAuthorization(User user, int expireIn);

    /**
     * 根据用户查找授权
     *
     * @param user 用户对象
     * @return 授权对象
     */
    Authorization findByUser(User user);

    /**
     * 通过用户查找未过期的授权
     *
     * @param user 用户
     * @return 授权对象
     */
    Authorization findAvailableByUser(User user);

    /**
     * 根据令牌查找授权对象
     *
     * @param token 令牌
     * @return 授权对象
     */
    Authorization findByTokenWithUser(String token);

    /**
     * 根据令牌查找授权对象
     *
     * @param token 令牌
     * @return Authorization
     */
    Authorization findByToken(String token);

    /**
     * 刷新授权，更新授权的expireIn和lastActivityTime
     *
     * @param authorization 授权
     * @param expireIn      存活时间
     * @return 授权对象
     */
    Authorization touch(Authorization authorization, int expireIn);

    /**
     * 删除收据库中的过期授权
     *
     * @return 删除的授权数量
     */
    int deleteOverdue();

    /**
     * 通过用户删除授权
     *
     * @param user 用户对象
     * @return 被删除的授权对象
     */
    Authorization deleteByUser(User user);
}
